package com.iaz.tech.tools.ai.neuron.exec;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.iaz.tech.tools.ai.neuron.runtime.INeuronRuntimeAbility;
import com.iaz.tech.tools.uml.IUMLNeuronAble;
import com.iaz.tech.tools.uml.relationship.Relationship;
import com.iaz.tech.tools.uml.relationship.impl.NeuronAggregationsRelationship;

import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(callSuper=false)
@Data
public class NeuronAggregationsCodeGenerator extends NeuronCodeGenerator {
    /**
     * 日志
     */
	private final static Logger logger = (Logger) LoggerFactory.getLogger(NeuronAggregationsCodeGenerator.class);
    
    public NeuronAggregationsCodeGenerator() {
        super();
    }

    public NeuronAggregationsCodeGenerator(INeuronRuntimeAbility runtime) {
        super();
        this.setRuntime(runtime);
    }
    /**
     * 生成聚合代码
     * 聚合
     * 聚合（Aggregation）‌：整体和部分是可独立存在的。例如，一个公司可以有多个部门，但公司可以在没有部门的情况下继续存在。
     * 
     * 在java 语言中， 聚合和组合，是同一种模式
     * Aggregation（聚合）和Composition（组合）都是UML中的关系类型，用于描述类之间的依赖关系。
     * 聚合表示整体和部分是可独立存在的关系，而组合表示整体和部分是不可分的关系。
     */
    @Override
    public Relationship toRelationship(IUMLNeuronAble uml) throws Exception {
        if (uml == null) {
            throw new IllegalArgumentException("uml不能为null");
        }
        if (!(uml instanceof NeuronAggregationsRelationship)){
            throw new IllegalArgumentException("uml必须为 NeuronAggregationsRelationship.");
        }
        return (NeuronAggregationsRelationship) uml;        
    }
}
